package com.sunwayhorizo.health.hl7.vocabulary;

import com.sunwayhorizo.health.hl7.datatypes.CS;
import com.sunwayhorizo.health.hl7.datatypes.common.InternalFactory;
import com.sunwayhorizo.health.hl7.rim.Container;
import com.sunwayhorizo.health.hl7.rim.Hl7Entity;
import com.sunwayhorizo.health.hl7.rim.LivingSubject;
import com.sunwayhorizo.health.hl7.rim.Person;
import com.sunwayhorizo.health.hl7.rim.Place;

public enum EntityCdSetCode
{
    //person
    EDUCATIONLEVELCODE("教育水平编码",Person.class),
    LIVINGARRNGMNTCODE("居住环境编码",Person.class),
    MARITALSTATUSCODE("婚姻状态编码",Person.class,"MaritalStatus"),
    RELIGIOUSAFLTNCODE("宗教信仰编码",Person.class),
    DISABILITYCODE("残疾程度编码",Person.class),
    ETHNICGROUPCODE("民族团体编码",Person.class,"Nation"),
    RACECODE("种族编码",Person.class),
    IDENTITYCODE("身份编码",Person.class,"EmployeeState"),
    ORIGINCODE("籍贯编码",Person.class,"AdministrativeDivesions"),
    PROFESSIONCODE("职业编码",Person.class,"OccupationClassification"),
   
    //Material
    MTCLASSCODE("材料分类"),
    MTLIMITEDLEVEL("限制级别"),
    MTMADEBY("国产，进口，自制"),
    MANUFCTURERCODE("厂家"),
    INSURANCECLASSCODE("医保分类"),
    HANDLINGCODE("操作编码"),
    RISKCODE("风险编码"),
    FORMCODE("外形编码"),
    INDICATORCODE("药品标识"),
    //container
    CAPTYPECODE("盖子类型编码",Container.class),
    SEPARATORTYPECODE("隔层类型编码",Container.class),
    
    ALERTLEVELCODE("警告等级编码"),
    LOCALREMOTECONTROLSTATECODE("本地远程控制状态编码"),
    LANGUAGECODE("语言编码"),
    MODECODE("模式编码"),
    PROFICILEVELCODE("熟练等级编码"),
    
    ADMINISTRATIVEGENDERCODE("行政性别编码",LivingSubject.class,"性别类型","AdministrativeGender"),
    NATIONALITYCODE("国籍编码",LivingSubject.class,"Country&Region"),
    
    GENDERSTATUSCODE("性别状态编码"),
    
    STANDARDINDUSTRYCLASSCODE("标准行业分类编码"),
    
    //Place
    TYPECODE("类型编码",Place.class),
    LEVELCODE("等级编码",Place.class),
    
    //Hl7Entity
    RIGHTSTYPECODE("权限类型编码",Hl7Entity.class),
    
    ;
  //hl7 cs值
    private CS cs;
    //描述
    private String description;
    //使用Rim类
    private Class<?> clazz;
    //字典中文名
    private String codingschemeChName;
    //字典英文名
    private String codingschemeEnName;


    public CS cs()
    {
        return cs;
    }


    public String getDescription()
    {
        return description;
    }


    public void setDescription(String description)
    {
        this.description = description;
    }


    private EntityCdSetCode()
    {
        this.cs = InternalFactory.newCS(this.toString());
    }


    private EntityCdSetCode(String description)
    {
        this.cs = InternalFactory.newCS(this.toString());
        this.description = description;
    }


    public CS getCs()
    {
        return cs;
    }


    public Class<?> getClazz()
    {
        return clazz;
    }


    public String getCodingschemeChName()
    {
        return codingschemeChName;
    }


    public String getCodingschemeEnName()
    {
        return codingschemeEnName;
    }
    
    private EntityCdSetCode(String description, Class<?> clazz, String codingschemeChName, String codingschemeEnName)
    {
        this.cs = InternalFactory.newCS(this.toString());
        this.description = description;
        this.clazz = clazz;
        this.codingschemeChName = codingschemeChName;
        this.codingschemeEnName = codingschemeEnName;
    }
    
    private EntityCdSetCode(String description, Class<?> clazz, String codingschemeEnName)
    {
        this.cs = InternalFactory.newCS(this.toString());
        this.description = description;
        this.clazz = clazz;
        this.codingschemeEnName = codingschemeEnName;
    }
    
    private EntityCdSetCode(String description,String codingschemeEnName)
    {
        this.cs = InternalFactory.newCS(this.toString());
        this.description = description;
        this.codingschemeEnName = codingschemeEnName;
    }
    
    private EntityCdSetCode(String description, Class<?> clazz)
    {
        this.cs = InternalFactory.newCS(this.toString());
        this.description = description;
        this.clazz = clazz;
    }
}
